// glsl在进行光栅化着色的时候,会产生大量的浮点数运算,这些运算可能是当前设备所不能承受的,
// 所以glsl提供了3种浮点数精度,我们可以根据不同的设备来使用合适的精度.
// 在变量前面加上 highp mediump lowp 即可完成对该变量的精度声明.
// 我们一般在片元着色器(fragment shader)最开始的地方加上 precision mediump float; 
// 便设定了默认的精度.这样所有没有显式表明精度的变量 都会按照设定好的默认精度来处理.
// 限定float的取值范围 highp (-2^62, 2^62); mediump (-2^14, 2^14); lowp (-2,2);
// 限定int的取值范围 highp (-2^16, 2^16); mediump (-2^10, 2^10); lowp (-2^8, 2^8);
precision lowp float;
// attribute	只能存在于vertex shader中,一般用于保存顶点或法线数据,它可以在数据缓冲区中读取数据
// vec2, vec3, vec4	n维浮点数向量 n-component floating point vector
attribute vec3 position;
attribute vec2 uv;

// uniform	在运行时shader无法改变uniform变量, 一般用来放置程序传递给shader的变换矩阵，材质，光照参数等等.
// mat2, mat3, mat4	2x2, 3x3, 4x4 浮点数矩阵 float matrix
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;

// 获取时间
uniform float uTime;

// varying 要负责在vertex 和 fragment 之间传递变量
varying vec2 vUv;

void main(){
    vUv = uv;
    vec4 modelPosition = modelMatrix * vec4( position, 1.0 );

    gl_Position = projectionMatrix * viewMatrix * modelPosition;
}